package com.atqinke.designpattern.structuraltype.flyweight;

import java.util.HashMap;

/**
 * @BelongsProject: BasicConnection
 * @BelongsPackage: com.atqinke.DesignPattern.structuraltype.flyweight
 * @Author: NieHk
 * @CreateTime: 2022-08-28  20:25
 * @Description: 提供了一个工厂类（BoxFactory），用来管理享元对象（也就是AbstractBox子类对象），
 * 该工厂类对象只需要一个，所以可以使用单例模式。并给工厂类提供一个获取形状的方法。
 * @Version: 1.0
 */
public class BoxFactory {

    private static HashMap<String, AbstractBox> map;

    private BoxFactory() {
        map = new HashMap<String, AbstractBox>();
        AbstractBox Block = new Block();
        AbstractBox Rectangle = new Rectangle();
        map.put("正形状", Block);
        map.put("长方形", Rectangle);
    }

    public static final BoxFactory getInstance() {
        return SingletonHolder.INSTANCE;
    }

    private static class SingletonHolder {
        private static final BoxFactory INSTANCE = new BoxFactory();
    }

    public AbstractBox getBox(String key) {
        return map.get(key);
    }
}
